package com.glacier.common.core.mapper;

import com.glacier.common.core.domain.BaseEntity;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * date 2022-11-06 21:51
 * mybatis mapper 基类接口
 *
 * @author glacier
 * @version 1.0
 */
public interface BaseMapper<T extends BaseEntity> {

    /**
     * 获取单条数据
     *
     * @param id
     * @return
     */
    <ID extends Serializable> T findById(@Param("id") ID id);

    /**
     * 查询数据列表
     *
     * @param entity
     * @return
     */
    List<T> findList(T entity);

    /**
     * 查询所有数据列表
     *
     * @param entity
     * @return
     */
    List<T> findAllList(T entity);


    /**
     * 插入数据
     *
     * @param entity
     * @return
     */
    int insert(T entity);

    /**
     * 更新数据
     *
     * @param entity
     * @return
     */
    int update(T entity);

    /**
     * 删除数据（一般为逻辑删除，更新del_flag字段为1）
     *
     * @param id
     * @return
     */
    <ID extends Serializable> int delete(@Param("id") ID id);

    /**
     * 删除
     *
     * @param ids
     * @param <ID>
     * @return
     */
    <ID extends Serializable> int batchDelete(@Param("ids") Collection<ID> ids);
}
